package HashMap;

import java.util.HashMap;

/**
 *  题目 ：有效的变位词
 *  题目详述 ：
 *  给定两个字符串 s 和 t ，编写一个函数来判断它们是不是一组变位词（字母异位词）。
 *
 * 注意：若s 和 t中每个字符出现的次数都相同且字符顺序不完全相同，则称s 和 t互为变位词（字母异位词）。
 *
 */
public class OfferP32 {
    /**
     *  核心思想 ：
     *  即，由于需要存储不同类型的字符（character占用2个字节），使用hashmap来存储（key ：所要存储的字符，value ：其出现的次数）
     * @param s
     * @param t
     * @return
     */
    public boolean isAnagram(String s, String t) {
        if(s.length() != t.length() || s.equals(t)){
            // 当两个字符串长度不等时，其一定不为变位词;
            // 当两个字符串完全相等时，也不是变位词（保证两个字符串的顺序不一致）
            return false;
        }
        // hashmap存储（key存储的是字符，同时value存储的是其出现的次数）
        HashMap<Character , Integer> map = new HashMap<>();
        for (char c : s.toCharArray()) {
            // 遍历字符串s，将其的所有字符存入hashmap（用于字符串t进行比较）
            map.put(c,map.getOrDefault(c,0) + 1);
        }

        for (char c : t.toCharArray()) {
            // 若是存储字符串s的hashmap中不含有字符串t中的键值对的话，即不为变位词
            if(!map.containsKey(c) || map.get(c) == 0){ // 表示字符串s和字符串t中有相同的字符，但是其数目不一致
                return false;
            }
            map.put(c,map.getOrDefault(c , 0) - 1);
        }
        return true;
    }
}
